<?php

namespace Muyuxuanpay\threePay;

interface ProtocolPaymentPay
{

    /**
     * 预签约
     * @param string $out_trade_no 商户订单号
     * @param string $id_crad_no 身份证号
     * @param string $id_crad_type 证件类型
     * @param string $card_name 姓名
     * @param string $mobile 手机号
     * @param string $card_no 银行卡号
     * @param string $notify_url 回调地址
     * @param array $event 事件
     * @return mixed
     */
    public function preContract(string $out_trade_no,string $id_crad_no,string $id_crad_type,string $card_name,string $mobile,string $card_no,string $notify_url='',array $event=[]);

    /**
     * 确认签约
     * @param string $out_trade_no 商户订单号
     * @param string $presign_seq_no 订单流水号
     * @param string $sms_code 短信验证码
     * @return mixed
     * @throws \Exception
     */
    public function contractConfirm(string $out_trade_no,string $presign_seq_no,string $sms_code);

    /**
     * 查询签约
     * @param string $out_trade_no 商户订单号
     * @param string|null $chanpay_trade_no 畅捷订单号
     * @return mixed
     * @throws \Exception
     */
    public function contractQuery(string $out_trade_no,?string $chanpay_trade_no=null,array $event=[]);
    /**
     * 解约
     * @param string $out_trade_no 商户订单号
     * @param string $sign_id 协议号
     * @param string $sign_acct_shrt_id 协议账户短号(银行账户后4位)
     * @return mixed
     * @throws \Exception
     */
    public function unContract(string $out_trade_no,string $sign_id,string $sign_acct_shrt_id='',array $event=[]);
    /**
     * 快捷支付
     * @param string $out_trade_no 商户订单号
     * @param string $sign_id 签约协议号
     * @param string|int|float $total_amount 订单金额
     * @param string $body 订单描述
     * @param array $event [sms_pay_code=短信验证码][remark=备注信息][notify_url=回调地址]
     * @return mixed
     * @throws \Exception
     */
    public function quickPay(string $out_trade_no,string $sign_id,$total_amount,string $body='',array $event=[]);
    /**
     * 订单查询
     * @param string $out_trade_no 订单号
     * @param string|null $chanpay_trade_no 畅捷订单号
     * @return mixed
     * @throws \Exception
     */
    public function orderQuery(string $out_trade_no,?string $chanpay_trade_no=null,array $event=[]);
    /**
     * 退款
     * @param string $out_trade_no  支付订单号
     * @param string $out_refund_no 退款订单号
     * @param string|int|float $refund_amount 退款金额
     * @param string|null $chanpay_trade_no 畅捷订单号
     * @return mixed
     * @throws \Exception
     */
    public function refundOrder(string $out_trade_no,string $out_refund_no,$refund_amount,?string $chanpay_trade_no=null,array $event=[]);
    /**
     * 退款查询
     * @param string $out_trade_no 支付订单号
     * @param string $out_refund_no 退款订单号
     * @param string|null $chanpay_trade_no 畅捷订单号
     * @param string|null $chanpay_refund_no 畅捷退款订单号
     * @return mixed
     * @throws \Exception
     */
    public function refundQuery(string $out_trade_no,string $out_refund_no,?string $chanpay_trade_no=null,?string $chanpay_refund_no = null);
}